From f15aa2f3e535336ba177510a87b3f28070c76fc2 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 14 Feb 2021 11:54:05 -0500 Subject: [PATCH] imcontext: Fix a regression in Compose file parsing We accidentally dropped the handing of # comments. Bring it back. Test included. Fixes: #3664 --- gtk/gtkcomposetable.c | 30 ++++++++++++++++--------- testsuite/gtk/compose/comments | 4 ++++ testsuite/gtk/compose/comments.expected | 5 +++++ 3 files changed, 29 insertions(+), 10 deletions(-) create mode 100644 testsuite/gtk/compose/comments create mode 100644 testsuite/gtk/compose/comments.expected diff --git a/gtk/gtkcomposetable.c b/gtk/gtkcomposetable.c index c5261f8a63..20afc2dc44 100644 --- a/gtk/gtkcomposetable.c +++ b/gtk/gtkcomposetable.c @@ -77,28 +77,40 @@ parse_compose_value (GtkComposeData *compose_data, const char *val, const char *line) { - char *word; const char *p; - gsize len; GString *value; gunichar ch; char *endp; - len = strlen (val); - if (val[0] != '"' || val[len - 1] != '"') + if (val[0] != '"') { g_warning ("Need to double-quote the value: %s: %s", val, line); goto fail; } - word = g_strndup (val + 1, len - 2); - value = g_string_new (""); - p = word; + p = val + 1; while (*p) { - if (*p == '\\') + if (*p == '\0') + { + g_warning ("Missing closing '\"': %s: %s", val, line); + goto fail; + } + else if (*p == '\"') + { + p++; + while (*p && g_ascii_isspace (*p)) + p++; + if (*p != '\0' && *p != '#') + { + g_warning ("Garbage after closing '\"': %s: %s", val, line); + goto fail; + } + break; + } + else if (*p == '\\') { if (p[1] == '"') { @@ -148,8 +160,6 @@ parse_compose_value (GtkComposeData *compose_data, compose_data->value = g_string_free (value, FALSE); - g_free (word); - return TRUE; fail: diff --git a/testsuite/gtk/compose/comments b/testsuite/gtk/compose/comments new file mode 100644 index 0000000000..062c9aac08 --- /dev/null +++ b/testsuite/gtk/compose/comments @@ -0,0 +1,4 @@ + : "a" # just an a + : "#" # not an a +# this line is ignored + : "a" # wild and wilder: "@!$# diff --git a/testsuite/gtk/compose/comments.expected b/testsuite/gtk/compose/comments.expected new file mode 100644 index 0000000000..728817b5db --- /dev/null +++ b/testsuite/gtk/compose/comments.expected @@ -0,0 +1,5 @@ +# n_seqs: 3 +# max_seq_len: 2 + : "a" # U61 + : "#" # U23 + : "a" # U61 -- 2.30.2